package org.aksw.sparqlify.admin.web.api; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.aksw.sparqlify.jpa.EntityRef; public class EntityRefUtils { @SuppressWarnings("rawtypes") public static CriteriaQuery<?> toCriteria(EntityManager em, EntityRef entityRef) { CriteriaBuilder cb = em.getCriteriaBuilder(); Class<?> entityClass = entityRef.getEntityClass(); CriteriaQuery cq = cb.createQuery(entityClass); @SuppressWarnings("unchecked") Root r = cq.from(entityClass); Map<String, Object> map = entityRef.getPropertyToValue(); List<Predicate> predicates = new ArrayList<Predicate>(map.size()); for(Entry<String, Object> entry : map.entrySet()) { String propertyName = entry.getKey(); Object value = entry.getValue(); Predicate predicate = cb.equal(r.get(propertyName), value); predicates.add(predicate); } cq.where(predicates.toArray(new Predicate[0])); @SuppressWarnings("unchecked") CriteriaQuery result = cq.select(r); return result; //List<ConfigToExecution> result = em.createQuery(cq).getResultList(); } public static List<?> fetchEntities(EntityManager em, List<EntityRef> entityRefs) { List<Object> result = new ArrayList<Object>(); for(EntityRef entityRef : entityRefs) { List<?> items = fetchEntities(em, entityRef); result.addAll(items); } return result; } public static List<?> fetchEntities(EntityManager em, EntityRef entityRef) { CriteriaQuery<?> criteriaQuery = EntityRefUtils.toCriteria(em, entityRef); List<?> result = em.createQuery(criteriaQuery).getResultList(); return result; } }